'''
Created on 12/10/2011

@author: silviojr
'''
from Termo import Termo
from Thesaurus import *

class Dicionario(object):
    '''
    classdocs
    '''


    def __init__(self, max):
        '''
        Constructor
        '''
        self.termos = []
        self.nivelMax = max;
        
    def adicionarTermo(self, nome, pos, polaridade, nivel, relacao, seed, precedente ):
        for termo in self.termos:
            if termo.nome == nome and termo.pos == pos:
                termo.checa(polaridade, nivel, relacao, seed, precedente)
                return
            
        self.termos.append(Termo(nome,
                            pos, 
                            polaridade,
                            nivel,
                            relacao,
                            seed,
                            precedente))
        
    def imprimirTermos(self):
        for termo in self.termos:
            print termo.nome," ", termo.getPolaridade()," deriva da relacao de ", termo.getRelacao(),"do termo seed ", termo.getSeed()
    
    def mudaPolaridade(self, polaridade):
        if(polaridade == "negativa"):
            return "positiva"
        if(polaridade == "positiva"):
            return "negativa"
        return "neutra"
      
    def expandeDicionario(self, thesaurus, listaSeed):
        for seed in listaSeed:
            self.expandeDicionarioRecursivo(seed.nome, thesaurus, seed.nome, "this_is_a_seed", 0, "this_is_a_seed", seed.pos, seed.getPolaridadePorVotos() )
            
    def expandeDicionarioRecursivo(self, entrada, thesaurus, seed, precedente, nivel, relacao, pos, polaridade): 
        if nivel == self.nivelMax:
            return
        listaSinonimos = []
        listaSinonimos = thesaurus.retornaSinonimos(entrada,pos)
        for termo in listaSinonimos:
            self.expandeDicionarioRecursivo(termo, thesaurus, seed, entrada, nivel+1, "sinonimo", pos, polaridade)
        listaAntonimos = []
        listaAntonimos = thesaurus.retornaAntonimos(entrada,pos)
        for termo in listaAntonimos:
            self.expandeDicionarioRecursivo(termo, thesaurus, seed, entrada, nivel+1, "antonimo", pos, self.mudaPolaridade(polaridade))
        
        self.adicionarTermo(entrada, pos, polaridade, nivel, relacao, seed, precedente)
        return
        
    def expandeDicionarioRecursivoAntonimo(self, entrada, thesaurus, seed, precedente, nivel, relacao, pos, polaridade):
        if nivel == 10:
            return
        listaAntonimos = thesaurus.retornaAntonimos(seed, pos)
        self.adicionarTermo(entrada, pos, polaridade, nivel, relacao, seed, precedente)
        polaridade = self.mudaPolaridade(polaridade)
        for termo in listaAntonimos:
            self.expandeDicionarioRecursivoAntonimo(termo, thesaurus, seed, entrada, nivel+1, "antonimo", pos, polaridade)
        return
    
    def expandeDicionarioRecursivoSinonimo(self, entrada, thesaurus, seed, precedente, nivel, relacao, pos, polaridade):
        if nivel == 10:
            return
        listaSinonimos = thesaurus.retornaSinonimos(seed, pos)
        for termo in listaSinonimos:
            self.expandeDicionarioRecursivoSinonimo(termo, thesaurus, seed, entrada, nivel+1, "sinonimo", pos, polaridade)
        
    
    
    '''
    imprime o dicionario. o paramttro pode ser "votos", "nivel"
    '''

    def imprimeDicionario(self, parametro, seeds):
        termosPositivos = 0
        termosNegativos = 0
        termosNeutros = 0
        votosDiscordantes = 0
        antonimos = 0
        sinonimos = 0
        
        if parametro == 'votos':
            listaVotos = []
            for i in range(0, 100000):
                listaVotos.append(0)
        if parametro == 'nivel':
            listaNiveis = []
            for i in range(0, 10):
                listaNiveis.append(0)
        
        listaSeedsP = []
        listaSeedsN = []
        listaSeedsNeu = []
        for i in range(0, len(seeds) ):
            listaSeedsN.append(0)
            listaSeedsP.append(0)
            listaSeedsNeu.append(0)
        
        for termo in self.termos:
            if parametro == 'votos':
                #inicio de if votos
                if termo.getPolaridadePorVotos() == 'negativa':
                    termosPositivos = termosPositivos + 1
                elif termo.getPolaridadePorVotos() == 'positiva':
                    termosNegativos = termosNegativos + 1
                else:
                    termosNeutros = termosNeutros + 1
                
                if termo.getVotosDiscordantes() == True:
                    votosDiscordantes = votosDiscordantes + 1
                    
                i = termo.getNumeroVotos()
                listaVotos[i] = listaVotos[i] + 1
                #fim de if votos
                
                
            if parametro == 'nivel':
                if termo.getPolaridadePorNivel() == 'negativa':
                    termosPositivos = termosPositivos + 1
                if termo.getPolaridadePorNivel() == 'positiva':
                    termosNegativos = termosNegativos + 1
                if termo.getPolaridadePorNivel() == 'neutra':
                    termosNeutros = termosNeutros + 1
                    
                i = termo.getNivel()
                listaNiveis[i] = listaNiveis[i] + 1
                    
            for i in range(0, len(seeds) ):
                if termo.getSeedNegativo(seeds[i].nome) == True:
                    listaSeedsN[i] = listaSeedsN[i] + 1
                if termo.getSeedPositivo(seeds[i].nome) == True:
                    listaSeedsP[i] = listaSeedsP[i] + 1
                if termo.getSeedNeutro(seeds[i].nome) == True:
                    listaSeedsNeu[i] = listaSeedsNeu[i] + 1
            if termo.getRelacao() == 'sinonimo':
                sinonimos = sinonimos + 1
            else:
                antonimos = antonimos + 1
       
                    
            
            #termo.imprimeTermo(parametro)
            #print ' '
            
        print 'O total de termos positivos eh ', termosPositivos, " termos negativos: ", termosNegativos, " termos neutros: ", termosNeutros
        
        if parametro == 'votos':
            print 'Houve votos diferenets em ', votosDiscordantes, ' termos'
            print 'Votos para termos '
            for i in range(0,100):
                if listaVotos[i] != 0:
                    print i,' ', listaVotos[i]
        
        if parametro == 'nivel':
            for i in range(0, 10):
                if listaNiveis[i] != 0:
                    print i, " ", listaNiveis[i]
            print 'sinonimos ', sinonimos, 'antonimos ', antonimos

            
                    
        
                
        print 'Cada seed alcanca esse numero de palavras Positivo|Negativo'
        
        for i in range(0, len(seeds) ):
            print seeds[i].nome, '-', listaSeedsP[i], "|", listaSeedsN[i]

                
        
            
             
            
            